window.dom = {
    create(str){
        // <template>是一个万能标签，用来当容器
        const container = document.createElement('template');

        // trim() 方法会从一个字符串的两端删除空白字符。
        // 来源：https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
        container.innerHTML = str.trim();

        return container.content.firstChild;
    },

    after(node, node2){ // 有点意思
        node.parentNode.insertBefore(node2, node.nextSibling);
    },

    before(node, node2){
        node.parentNode.insertBefore(node2, node);
    },

    append(parent, node){
        parent.appendChild(node);
    },

    wrap(node, parent){
        dom.before(node, parent);
        dom.append(parent, node);
    },

    remove(node){
        node.parentNode.removeChild(node);

        return node; // 删除后再返回其引用，以备使用
    },

    empty(node){
        const array = new Array();
        let x = node.firstChild;
        while(x){
            array.push(dom.remove(node.firstChild));
            x = node.firstChild;
        }

        return array;
    },

    attr(node, name, value){ // 重载，判定参数个数
        if(arguments.length === 3){
            // 如果有3个参数
            node.setAttribute(name, value);
        }else if(arguments.lengtg === 2){
            return node.getAttribute(name);
        }
    },

    text(node, str){
        if(arguments.length === 2){
            if('innerText' in node){
                node.innerText = str;
            }else{
                node.textContent = str;
            }
        }else if(arguments.length === 1){
            if('innerText' in node){
                return node.innerText;
            }else{
                return node.textContent;
            }
        }
    },

    html(node, str){
        if(arguments.length === 2){
            node.innerHTML = str;
        }else if(arguments.length === 1){
            return node.innerHTML;
        }
    },

    // 从style开始写
    style(node, name, value){
        if(arguments.length === 3) {
            node.style[name] = value;
        }else if(arguments.length === 2) {
            if(typeof name === 'string') {
                return node.style[name];
            }else if(name instanceof Object) {
                const obj = name;
                for(let key in obj) {
                    node.style[key] = obj[key];
                }
            }
        }
    }
};